from flask import Blueprint, request, redirect, jsonify
from common.libs.Helper import ops_render
from common.libs.Helper import iPagination
from common.libs.UrlManager import UrlManager
from common.libs.Helper import getCurrentDate
from common.models.member.Member import Member
from common.models.member.MemberComments import MemberComment
from common.models.pay.PayOrder import PayOrder
from application import app,db
route_member = Blueprint('member_page', __name__)


@route_member.route("/index", methods=['POST', 'GET'])
def index():

    resp_data = {}
    req =request.args
    page = int(req['p']) if ('p' in req and req['p']) else 1
    query = Member.query

    # 忘记是做什么的
    if 'mix_kw' in req:
        query = query.filter(Member.nickname.ilike("%{0}%".format( req['mix_kw'])))

    # 判断状态是否正确
    if 'status' in req and int( req['status']) > -1:
        query = query.filter(Member.status == int( req['status']))

    # 分页功能
    page_params = {
        'total': query.count(),
        'page_size': app.config['PAGE_SIZE'],
        'page': page,
        'display': app.config['PAGE_DISPLAY'],
        # 去掉分页参数
        'url': request.full_path.replace("&p={}".format(page), "")
    }

    pages = iPagination(page_params)
    offset = (page-1) * app.config['PAGE_SIZE']
    list = Member.query.order_by(Member.id.desc() ).offset(offset).limit(app.config['PAGE_SIZE']).all()

    resp_data['list'] = list
    resp_data['pages'] = pages
    resp_data['search_con'] = req
    resp_data['status_mapping'] = app.config['STATUS_MAPPING']
    return ops_render("member/index.html", resp_data)


@route_member.route("/info")
def info():

    resp_data = {}
    req = request.args
    id = int(req.get('id', 0))

    # 这里为什么要判断url？？
    reback_url = UrlManager.buildUrl("/member/index")
    if id < 1 :
        return redirect( reback_url)

    info = Member.query.filter_by(id=id).first()
    if not info:
        return redirect( reback_url)

    pay_order_list = PayOrder.query.filter_by( member_id = id ).filter( PayOrder.status.in_( [-8,1] ) )\
        .order_by( PayOrder.id.desc() ).all()

    comment_list = MemberComment.query.filter_by( member_id= id ).order_by( MemberComment.id.desc()).all()

    # 汇总全部的返回信息
    resp_data['info'] = info
    resp_data['pay_order_list'] = pay_order_list
    resp_data['comment_list'] = comment_list
    resp_data['current'] = 'index'

    return ops_render("member/info.html", resp_data)


@route_member.route("/set", methods=['POST','GET'])
def set():
    # get方法直接回去
    if request.method == 'GET':
        resp_data = {}
        req = request.args
        id = int(req.get("id",0))
        reback_url = UrlManager.buildUrl("/member/index")

        if id < 1:
            return redirect(reback_url)

        info = Member.query.filter_by(id=id).first()
        if not info:
            return redirect(reback_url)

        if info.status != 1:
            return redirect(reback_url)

        resp_data['info'] = info
        resp_data['current'] = 'index'
        return ops_render("member/set.html", resp_data)

    resp = { 'code': 200, 'msg': '操作成功~~','data':{} }
    req = request.values
    id = req['id'] if 'id' in req else 0
    nickname = req['nickname'] if 'nickname' in req else ''

    if nickname is None or len( nickname ) < 1:
        resp['code'] = -1
        resp['msg'] = '请输入符合规范的名称~~'
        return jsonify(resp)

    member_info = Member.query.filter_by(id=id).first()

    if not member_info:
        resp['code'] = -1
        resp['msg'] = "指定会员不存在~~"
        return jsonify(resp)

    member_info.nickname = nickname
    member_info.updated_time = getCurrentDate()
    db.session.add( member_info)
    db.session.commit()
    return jsonify(resp)

@route_member.route("/comment")
def comment():

    resp_data = {}
    req = request.args
    page = int(req['p']) if ('p' in req and req['p']) else 1
    query = MemberComment.query

    page_params = {
        'total': query.count(),
        'page_size': app.config['PAGE_SIZE'],
        'display': app.config['PAGE_DISPLAY'],
        'page': page,
        'url': request.full_path.replace("&p={}".format(page), "")
    }

    pages = iPagination(page_params)
    offset = (page-1) * app.config['PAGE_SIZE']

    # 会员评论
    comment_list = query.order_by(MemberComment.id.desc()).offset(offset).limit(app.config['PAGE_SIZE']).all()

    resp_data['pages'] = pages
    resp_data['comment_list'] = comment_list
    return ops_render("member/comment.html", resp_data)

@route_member.route("/ops", methods=['POST'])
def ops():

    resp = {'code':200, 'msg': '操作成功', 'data': {}}
    req = request.values

    id = req['id'] if 'id' in req else 0
    act = req['act'] if 'act' in req else ''        # 前端传值过来js

    if not id:
        resp['code'] = -1
        resp['msg'] = "请选择要操作的账号"
        return jsonify(resp)

    if act not in ['remove', 'recover']:
        resp['code'] = -1
        resp['msg'] = "操作有误，请重试！"
        return jsonify(resp)

    member_info = Member.query.filter_by(id=id).first()
    if not member_info:
        resp['code'] = -1
        resp['msg'] = "指定会员不存在！"
        return jsonify(resp)

    if act == 'remove':
        member_info.status= 0
    elif act == "recover":
        member_info.status = 1

    member_info.updated_time = getCurrentDate()
    db.session.add( member_info)
    db.session.commit()
    return jsonify(resp)